#include <stdio.h>
#include <stdlib.h>


#define STRSIZE 32

/*
 *
 *       int scanf(const char *format, 地址表);
 *
 *
 * */
void test1(void)
{


	int i;
	float f;
	
	printf("plz enter:\n");
	/*用户输入的格式要与代码中格式一致 
 	* 如果代码写成 %d%f 用户输入时可以用空格 tab 回车 隔开
	*
	* */
	//scanf("%d,%f",&i,&f);
	scanf("%d%f",&i,&f);
	printf("i=%d\n",i);
	printf("f=%f\n",f);
	


}
/*
 *输入数组注意 不用加地址符
 *
 * */
void test2(void)
{
	printf("plz enter:\n");
	char str[STRSIZE];
	/*sanf 与%s 的危险
	 * 危险:注意如果用scanf("%s",str) 此时用户输入带有空格 tab 回车 都会被认为输入结束
	 * 	 解决：使用专门的str的输入输出函数 	
	 *  危险:string最后的一个字符带有'\0'(NULL) ==》STRSIZE规定了长度 但是用户随意输入会导致越界
	 * */
	scanf("%s",str);
	printf("str = %s\n",str);



}
/*
 *while + scanf
 * */
void test3(void)
{
	int i;
	printf("plz enter:\n");
	/*
 	* 危险:当用户输入了一个不符合数据类型的值时 会卡死
 	* 	解决:检验scanf()的返回值
 	* */
	while(1)
	{
		int ret;
		ret = scanf("%d",&i);
		if(ret != 1)
		{
			printf("enter err!\n");
			sleep(1);
			break;
		}
		printf("i = %d\n",i);
	}


}
/*
 *连续的scanf 的bug
 * */
void test4(void)
{
	int i;
	char ch;
	printf("plz enter:\n");
	scanf("%d",&i);
	/*
 	* 使用抑制符*吃掉其他字符
 	* 也可以用getchar()吃掉
 	* 	如:scanf("%d",&i);
 	* 	  getchar();
 	* 	  scanf("%c",&ch);
 	* */
	scanf("%*c%c",&ch);
	
	printf("i = %d, ch = %c----%d \n",i,ch,ch);


}


int main(void)
{
	test1();
	printf("=========\n");	
	test2();

	printf("=========\n");
//	test3();


	printf("=========\n");
	test4();



	exit(0);
}
